package modelo.moviles.naves;

import modelo.*;
import modelo.moviles.Movil;
import modelo.moviles.balas.Bala;

public abstract class Nave extends Movil {
	
	protected boolean guia;
	protected Porcentaje energia;
	protected int puntaje;
	protected boolean debeDisparar;
	
	public Nave(Nivel nuevoNivel){
		super(nuevoNivel);
		energia = new Porcentaje();
		guia = false;
	}

	public Porcentaje getEnergia() {
		return energia;
	}

	public void setEnergia(Porcentaje energia) {
		this.energia = energia;
	}

	public int getPuntaje() {
		return puntaje;
	}

	public void setPuntaje(int puntaje) {
		this.puntaje = puntaje;
	}

	/* "se fija si la energia es 0" */
	public boolean debeDestruirse(){
		return (energia.getPorcentaje() == 0);
	}

	/* "la nave estalla y devuelve su puntaje" */
	public void destruirse(){
		this.estallar();
		this.getNivel().sumarPuntaje(puntaje);
	}
	
	
	public boolean esGuia(){
		return guia;
	}
	
	public void setGuia(boolean esGuia){
		guia = esGuia;
	}
	
	/* "Le aviso al otro movil que se encontro con una Nave" */
	public void encuentroCon (Encontrable otroMovil){
		otroMovil.encuentroConNave(this);
	}


	/* "La nave maneja el encuentro con el Algo42" */
	public void encuentroConAlgo42 (Encontrable encontrable){
		Algo42 unAlgo42 = 	(Algo42) encontrable;
		unAlgo42.destruirse();
		this.destruirse();
	}

	/* "La nave maneja el encuentro con la bala" */
	public void encuentroConBala (Encontrable encontrable){
		Bala unaBala = (Bala)encontrable;
		if (!unaBala.esEnemiga() ){
			unaBala.estallar();
			this.recibirBala(unaBala);
			if(debeDestruirse()){
				destruirse();
			}
		}
	}

	public void encuentroConArsenal(Encontrable movil) {
	}

	public void encuentroConNave(Encontrable movil) {
	}

	public void encuentroConPorcentaje(Encontrable movil) {
	}
	
	/* Por defecto, las naves no pueden disparar*/
	public boolean puedeDisparar(){
		return false;
	}

	/* "Al recibir la bala la vida decrementa su porcentaje. En caso de llegar a cero debe morir" */
	public void recibirBala ( Bala bala){
		energia.decrementarPorcentaje(bala.getIntensidad());
	}

	public boolean debeDisparar() {
		return debeDisparar;
	}


	public void setDebeDisparar(boolean debeDisparar) {
		this.debeDisparar = debeDisparar;
	}	
}

